home *** CD-ROM | disk | FTP | other *** search
/ Gekikoh Dennoh Club 1 / Gekikoh Dennoh Club Vol. 1 (Japan).7z / Gekikoh Dennoh Club Vol. 1 (Japan) (Track 1).bin / kowin / archive / apl / gview120.lzh / gviewsrc.lzh / alloc.c next >
C/C++ Source or Header  |  1995-02-16  |  2KB  |  85 lines

  1. /*
  2.     Copyright 1995 Ogasawara Hiroyuki(COR.)
  3. */
  4.  
  5. #include    <corlib.h>
  6. #include    <sys_doslib.h>
  7. #include    "gview.h"
  8.  
  9. GVIEW *
  10. GV_Alloc( h, v, color, fname, comment, len )
  11. char    *fname;
  12. char    *comment;
  13. {
  14.     int    psize= GV_PaletSize( color ),
  15.         fsize= strlen(fname)+1,
  16.         csize= comment ? strlen(comment)+1 : 1,
  17.         msize= sizeof(GVIEW)+ sizeof(short)*psize+ psize*3+
  18.                                 fsize+ csize;
  19.     GVIEW    *gp;
  20.     msize= (msize+4) & 0xfffffffc;
  21.     if( !psize ){    /* 65536 */
  22.         if( (int)(gp= MALLOC( msize + h*v*2+len )) < 0 )
  23.             return    NULL;
  24.         gp->buf= (void*)((char*)gp+ msize);
  25.         gp->palet= NULL;
  26.         gp->base_palet= NULL;
  27.         gp->fname= (void*)((char*)gp+sizeof(GVIEW));
  28.     }else{
  29.         if( (int)(gp= MALLOC( msize + h*v+len )) < 0 )
  30.             return    NULL;
  31.         gp->buf= (void*)((char*)gp+ msize);
  32.         gp->palet= (void*)((char*)gp+sizeof(GVIEW));
  33.         gp->base_palet= (void*)((char*)gp->palet+sizeof(short)*psize);
  34.         gp->fname= (char*)gp->base_palet+ psize*3;
  35.     }
  36.     strcpy( gp->fname, fname );
  37.     gp->comment= gp->fname + fsize;
  38.     if( comment )
  39.         strcpy( gp->comment, comment );
  40.     else
  41.         *gp->comment= '\0';
  42.     gp->rh= gp->h= h;
  43.     gp->rv= gp->v= v;
  44.     gp->color= color;
  45.     gp->rx= gp->ry=
  46.     gp->flag= gp->info= 0;
  47.     gp->wp= NULL;
  48.     return    gp;
  49.  
  50. #if 0
  51.     gp= malloc( sizeof(GVIEW) + sizeof(short)*psize + sizeof(int)*psize +
  52.                             fsize + csize );
  53.     if( !gp )
  54.         return    NULL;
  55.     if( !psize ){    /* 65536 */
  56.         gp->buf= MALLOC( h*v*2 );
  57.         gp->palet= NULL;
  58.         gp->base_palet= NULL;
  59.         gp->fname= (void*)((char*)gp+sizeof(GVIEW));
  60.     }else{
  61.         gp->buf= MALLOC( h*v );
  62.         gp->palet= (void*)((char*)gp+sizeof(GVIEW));
  63.         gp->base_palet= (void*)((char*)gp->palet+sizeof(short)*psize);
  64.         gp->fname= (char*)gp->base_palet+ sizeof(int)*psize;
  65.     }
  66.     if( (int)gp->buf < 0 ){
  67.         free( gp );
  68.         return    NULL;
  69.     }
  70.     strcpy( gp->fname, fname );
  71.     gp->comment= gp->fname + fsize;
  72.     if( comment )
  73.         strcpy( gp->comment, comment );
  74.     else
  75.         *gp->comment= '\0';
  76.     gp->h= h;
  77.     gp->v= v;
  78.     gp->color= color;
  79.     gp->mode= gp->flag= gp->small_level= 0;
  80.     gp->wp= NULL;
  81.     return    gp;
  82. #endif
  83. }
  84.  
  85.